// component/spec/spec.js
/*
使用方法
js:
    that.setData({
      goodsId: goodsId
    })

wxml:
    <spec goodsId="{{goodsId}}"></spec>
*/
// 货品加入购物车组件
let api = require('../../config/api.js');
const app = getApp();
let that;
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    goodsId: {
      type: [String, Number],
      value: 0,
      observer(newValue, oldValue) {
        // 根据商品ID，获取货品
        if (newValue != 0){
          this.getProducts(newValue);
        }
        console.log('goodsId', newValue);
      }
    },
  },
  /**
   * 组件的初始数据
   */
  data: {
    ImgRootUrl: app.globalData.ImgRootUrl,
    cartList: [], //购物车列表
    goods: {},  //当前商品
    specificationList: [],  //当前规格列表
    productList: [],  //当前货品列表
    number: 0,  //当前规格购物车数量
    price: 0, //当前规格价格
    store_nums: 0,  //当前规格库存
    checkedSpecText: '请选择规格数量',
    checkedValues: [],  //当前已选规格集
    openAttr: false,
  },
  pageLifetimes: {
    // 组件所在页面的生命周期函数
    show() {
      // 页面被展示
      that = this;
    },
    hide() {
      // 页面被隐藏
    },
    resize() {
      // 页面尺寸变化
    },
  },
  /**
   * 组件的方法列表
   */
  methods: {
    //减
    cutNumber: function (event) {
      //购物车[货品 减]
      that.addToCart(-1);
    },
    //加
    addNumber: function (event) {
      //购物车[货品 加]
      that.addToCart(1);
    },
    //关闭 规格弹窗
    closeAttr: function () {
      this.setData({
        goodsId:0,
        goods: {},  //当前商品信息
        specificationList: [],  //当前规格列表
        productList: [],  //当前货品列表
        number: 0,
        price: 0,      //规格商品价格
        store_nums: 0, //库存数量
        checkedSpecText: '请选择规格数量',
        checkedValues: [],     //已选规格集
        openAttr: false,
      });
    },
    //根据商品id获取货品数据
    getProducts: function (goods_id = 0) {
      //接口获取货品数据
      app.util.get(api.GetProducts, { id: goods_id, random: Math.random() }).then(function (res) {
        if (res.errno == 0) {
          //货品价格：会员价优先
          let price = res.data.info.group_price ? res.data.info.group_price : res.data.info.sell_price;
          that.setData({
            openAttr: !that.data.openAttr,
            goods: res.data.info,
            specificationList: res.data.specificationList,
            productList: res.data.productList,
            price: price,
            store_nums: parseInt(res.data.info.store_nums)    //货品库存
          });
          //规格集初始化
          let len = res.data.specificationList.length;
          for (let k = 0; k < len; k++)  that.data.checkedValues.push({ valueId: 0, name: res.data.specificationList[k].name });
        } else {
          //接口获取货品数据失败
          app.util.showToast(res.error);
        }
      });
      //请求接口，获取购物车列表
      app.cart.CartGoodsCount().then(function (res) {
        app.globalData.cartGoodsCount = res.data.cartTotal.goodsCount;
        that.setData({
          cartList: res.data.cartList
        });
      }).catch((err) => {
        console.log(err)
      });
    },
    //点击sku规格回调
    clickSkuValue: function (event) {
      let specValueId = event.currentTarget.dataset.valueId;  //*规格id
      let specName = event.currentTarget.dataset.name;        //*规格名字
      let specValue = event.currentTarget.dataset.value;      //*规格值
      let i = event.currentTarget.dataset.i;  //*specificationList的index
      let j = event.currentTarget.dataset.j;  //*value的index
      //初始化规格对象
      let _checkedObj = {
        valueId: 0,
        name: specName,
        value: specValue,
        i: i,
        j: j,
      };
      let _specificationList = this.data.specificationList;
      // 当前点击
      if (!_specificationList[i].value[j].checked) {
        _checkedObj.valueId = specValueId;
      }
      // 兄弟节点
      if (this.data.checkedValues[i].valueId != 0) {
        // 取消兄弟节点的选中
        let ii = this.data.checkedValues[i].i;
        let jj = this.data.checkedValues[i].j;
        // 处理当前点击，更新视图
        this.setData({
          ["specificationList[" + i + "].value[" + j + "].checked"]: !_specificationList[i].value[j].checked,
          ["specificationList[" + ii + "].value[" + jj + "].checked"]: false
        });
      } else {
        // 处理当前点击，更新视图
        this.setData({
          ["specificationList[" + i + "].value[" + j + "].checked"]: !_specificationList[i].value[j].checked,
        });
      }
      //保存当前选中的规格
      this.data.checkedValues[i] = _checkedObj;

      //已选规格信息显示
      let checkedValue = this.data.checkedValues.filter(function (v) {
        if (v.valueId != 0) {
          return true;
        } else {
          return false;
        }
      }).map(function (v) {
        return v.value;
      });
      if (checkedValue.length > 0) {
        this.setData({
          'checkedSpecText': checkedValue.join(' ')
        });
      } else {
        this.setData({
          'checkedSpecText': '请选择规格数量'
        });
      }
      //计算其他状态
      this.setSpecValueStatus();
    },
    //根据已选规格值，计算其它状态【价格、库存、立即购买、加入购物车 等等】
    setSpecValueStatus: function () {
      //完整规格？
      if (!this.isCheckedAllSpec()) {
        //规格不完整，清除规格价格、库存
        this.setData({
          number: 0,
          price: 0,
          store_nums: 0
        });
        return false;
      }
      //console.log('规格ok', this.data.checkedValues);
      //根据选中的规格，判断是否有对应的Product信息
      let checkedProduct = this.getCheckedProductItem(this.getCheckedSpecKey());
      //console.log('选中Product', checkedProduct);
      if (!checkedProduct || checkedProduct.length <= 0) {
        //找不到对应的product信息，提示用户
        wx.showToast({
          image: '/static/images/icon_error.png',
          title: '货品不存在',
          mask: true
        });
        return false;
      } else {
        //购物车商品计算
        let product = that.data.cartList.product;
        if (product[checkedProduct[0].id]) {
          that.setData({
            number: product[checkedProduct[0].id].count
          });
        } else {
          that.setData({
            number: 0
          });
        }
        //接口获取货品数据
        app.util.get(api.GetProduct, { product_id: checkedProduct[0].id, random: Math.random() }).then(function (res) {
          let _res = res;
          if (_res.errno == 0) {
            //货品价格：会员价优先
            let price = _res.data.group_price ? _res.data.group_price : _res.data.sell_price;
            that.setData({
              price: price,
              store_nums: parseInt(_res.data.store_nums)    //货品库存
            });
            //实时：验证库存
            if (_res.data.store_nums < that.data.number) {
              //提示剩余库存
              app.util.showToast('库存不足，剩余：' + _res.data.store_nums);
            }
          } else {
            //接口获取货品数据失败
            app.util.showToast(_res.error);
          }
        });
      }
    },
    //判断规格是否选择完整
    isCheckedAllSpec: function () {
      return !this.data.checkedValues.some(function (v) {
        if (v.valueId == 0) {
          return true;
        }
      });
    },
    //获取已选规格key的拼接串
    getCheckedSpecKey: function () {
      let checkedValueId = this.data.checkedValues.map(function (v) {
        return v.valueId;
      });
      return checkedValueId.join('_');
    },
    //获取已选规格的货品信息
    getCheckedProductItem: function (key) {
      let CheckedProductItem = this.data.productList.filter(function (v) {
        if (v.goods_spec_ids == key) {
          return true;
        } else {
          return false;
        }
      });
      return CheckedProductItem;
    },
    //货品 加入购物车回调
    addToCart: function (number = 1) {
      //console.log('已选规格集',this.data.checkedValues);
      let count = this.data.number;
      let cartList = this.data.cartList;
      let product = this.data.cartList.product;
      //完整规格？
      if (!this.isCheckedAllSpec()) {
        this.data.checkedValues.some(function (v) {
          if (v.valueId == 0) {
            //提示未选规格
            app.util.showToast('请选择：' + v.name);
          }
        });
        return false;
      }
      //根据已选规格，取对应的Product
      let checkedProduct = this.getCheckedProductItem(this.getCheckedSpecKey());
      //console.log('选中Product', checkedProduct);
      if (!checkedProduct || checkedProduct.length <= 0) {
        //无product，提示没有库存 
        wx.showToast({
          image: '/static/images/icon_error.png',
          title: '库存不足',
          mask: true
        });
        return false;
      }
      //购物车操作[加、减、删除]
      if (number <= 0) {
        //减
        switch (count) {
          case 0:
            return false;
            break;
          case 1:
            app.cart.CartDelete(checkedProduct[0].goods_id + '_' + checkedProduct[0].id).then(function (res) {
              app.globalData.cartGoodsCount = res.data.cartTotal.goodsCount;
              product[checkedProduct[0].id] = { count: 0 };
              cartList.product = product;
              that.setData({
                cartList: cartList,
                number: 0
              });
            }).catch((err) => {

            });
            break;
          default:
            app.cart.CartAdd(checkedProduct[0].goods_id, checkedProduct[0].id, -1).then(function (res) {
              app.globalData.cartGoodsCount = res.data.cartTotal.goodsCount;
              product[checkedProduct[0].id] = { count: count - 1 };
              cartList.product = product;
              that.setData({
                cartList: cartList,
                number: count - 1
              });
            }).catch((err) => {

            });
            break;
        }
      } else {
        //加
        that.setData({
          number: count + 1
        });
        app.cart.CartAdd(that.data.goods.id, checkedProduct[0].id, number).then(function (res) {
          app.globalData.cartGoodsCount = res.data.cartTotal.goodsCount;
          product[checkedProduct[0].id] = { count: count + 1 };
          cartList.product = product;
          that.setData({
            cartList: cartList
          });
          console.log(cartList);
        }).catch((err) => {
          that.setData({
            number: count
          });
        });
      }
    },
  }
})
